package cc.yugu.yhdw.webserver.web.controller.security.basic;

import cc.yugu.yhdw.common.annotation.ViewModel;
import cc.yugu.yhdw.common.constant.Constant;
import cc.yugu.yhdw.common.entity.json.ExtResult;
import cc.yugu.yhdw.common.utils.HttpUtils;
import cc.yugu.yhdw.common.utils.YhdwUtils;
import cc.yugu.yhdw.webserver.constant.AppConstEnum;
import cc.yugu.yhdw.webserver.utils.ReadUrlUtils;
import cc.yugu.yhdw.webserver.web.controller.security.SecurityController;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
/**
 * 用户管理中的 关于我们 控制类
 * 
 * @Date:Created in 2018/7/11 13:18
 * @Author:
 * @Modified By: zjn 2018/7/11 13:18
 */ 
@Controller
@RequestMapping(value = "/security/basic/about_us")
public class AboutUsController extends SecurityController {

    public static final String ABOUT_US_PROTOCOL_URL = "/security/basic_upload/about_us.htm";
    /**
    * 处理来自/security/basic/about_us/index.htm 地址映射 的方法，返回MENU_06_04.getValue()
    * 
    * @Param: [model]
    * @Return: void
    * @Author By: zjn 2018/7/11  13:18
    */ 
    @RequestMapping(value = "index.htm")
    public void index(Model model) {
        // 往前台传数据，可以通过EL表达式的 ${}获取
        model.addAttribute(MENU_CODE_NAME, AppConstEnum.Menu.MENU_06_04.getValue());
    }
    /**
    * 输出（带编码格式）
    * 
    * @Param: [agentId, response]
    * @Return: void
    * @Author By: zjn 2018/7/11  14:07
    */ 
    @RequestMapping(value = "load_html.htm")
    public void loadHtml(int agentId, HttpServletResponse response) throws IOException {
        // 按照指定格式 输出运营商id的路径名称
        String path = String.format(getAppConfig().staticUrl + "/static/basic/about_us/%d.html", agentId);
        ReadUrlUtils.Result result = ReadUrlUtils.readUrl(path);
        if(result != null && result.httpCode == 200 && StringUtils.isNotEmpty(result.httpContent)) {
            // 相应到浏览器的格式及编码，将浏览器的打开数据的编码格式设置为utf8
            response.setContentType("Content-Type:text/html;charset=UTF-8");
            // 通过Response进行数据的输出，将字符串写到response容器中，然后浏览器从容器中拿取数据进行显示即可
            // 由于响应体内容result.httpContent 中含有中文，上面已经设置成了utf8，所以需要 utf8,将传过去的数据设置成utf8的格式
            response.getOutputStream().write(result.httpContent.getBytes("UTF-8"));
        }
    }
    /**
    * 更新
    * 
    * @Param: [agentId, content]
    * @Return: cc.yugu.yhdw.common.entity.json.ExtResult
    * @Author By: zjn 2018/7/11  14:47
    */ 
    @RequestMapping(value = "update.htm")
    // 该注解用于将Controller的方法返回的对象，通过适当的HttpMessageConverter转换为指定格式后，写入到Response对象的body数据区，
    // 使用时机：返回的数据不是html标签的页面，而是其他某种格式的数据时（如json、xml等）使用；
    @ViewModel(ViewModel.JSON)
    @ResponseBody
    public ExtResult update(int agentId, String content) throws IOException {
        StringBuilder html = new StringBuilder();
        html.append("<!doctype html><html><head><meta name=\"viewport\" charset='utf-8' content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" /></head><body>");
        html.append(content.replace("<meta charset=\"utf-8\" />", ""));
        html.append("</body></html>");

        File sourceFile = new File(getAppConfig().tempDir, String.format("%d.html", agentId));
        YhdwUtils.makeParentDir(sourceFile);
        FileUtils.writeStringToFile(sourceFile, html.toString(), Constant.ENCODING_UTF_8);

        HttpUtils.HttpResp httpResp = HttpUtils.uploadFile(getAppConfig().staticUrl + ABOUT_US_PROTOCOL_URL, sourceFile, Collections.EMPTY_MAP); //upload to static server
        if(httpResp.status / 100 == 2) {
            return ExtResult.successResult();
        } else {
            return ExtResult.failResult("保存失败");
        }
    }

}
